﻿using CKS.Core.Framework;
using Microsoft.Extensions.DependencyInjection;
using Infrastructure;
using Microsoft.Extensions.Logging;

using ZR.Model.Models.ProductionControl;
using CKS.PLC.Action.Subscription.OP10;
using CKS.PLC.Core.Event;

namespace CKS.PLC.Action.OP10
{
    /// <summary>
    /// 动作编号201
    /// 校验是否允许L1上料
    /// 
    /// </summary>
    public class Cks201Action : LoadingActionBase
    {
        public Cks201Action(DecodeValue _value) : base(_value)
        {
        }
        /*
                 查询上料计划表 
                 上料配置：CKS_LoadingPlan_Config
                 零件类型、校验周期（小时）、周期最大上料、每批次上料子篮数量、每个子篮零件数量、推荐顺序 、上次上料时间
                 系统计划表 CKS_LoadingPlan
                 计划ID\状态（执行中、已完成）\创建时间\   
                 系统计划明细表：CKS_LoadingPlan_Details
                 明细ID,计划ID,零件类型，计划上料数量，实际上料数量，创建时间，最新上料时间
                 



                上料流量控制：
                    上料配置：
                    监测计划：

                查询当前计划，
                    不存在就创建新的计划，
                    存在就验证当前零件是否完成
                        完成 写入NG
                        未完成 写入OK
                 */
        public override void Execute()
        {
            var result = Value.Value.ToInt();
            int replayDB = 3010;
            int replayAction = 201;

            if (result == 1)
            {

                string bluecode = Value.GetLinkData(1).ToString();
                ProccessLoading(replayDB, replayAction, bluecode);

                EventBus.AddLog($"OP10-L1请求上料 {bluecode}");

            }
            else
            {
                var needTypePos = Value.GetPosition(replayDB, replayAction, 2);
                var replayPos = Value.GetPosition(replayDB, replayAction, 1);
               
                AckWriteInt16(needTypePos, 0);
                AckWriteInt16(replayPos, 0);
            
                EventBus.AddLog($"OP10-L1请求上料 重置保存状态");
            }
        }

        
    
    }
}
